0 REM THE TRANSACTOR VOLUME 5 ISSUE 06 PAGE 29 10 REM ******************************** 14 REM ** AN AMAZING KEYBOARD DRIVER ** 16 REM **** FOR YOUR COMMODORE 64 **** 18 REM *** AUBREY STANLEY DEC 1984 *** 20 REM ******************************** 22 REM ** 50 TB$="KERNEL":PG$="KPRG":REM *TELLS LOADER HOW TO LOAD KWIZ* 52 I=53216:NK=2:REM *IRQ ADDRESS & N-KEY ROLLOVER COUNT* 54 IF TB$="KERNEL" AND PG$="KPRG" THEN 100:REM *USE KERNEL TABLES & DATA LINES* 56 IF FT>1 THEN 100:REM *PROGRAM AND TABLE FILES LOADED FROM DISK* 58 IF FT=1 THEN 62:REM *PROGRAM FILE LOADED FROM DISK* 60 FT=1:IF PG$<>"KPRG" THEN PG=1:LOAD "0:"+PG$,8,1: REM *LOAD PROGRAM FILE* 62 FT=2:IF TB$<>"KERNEL" THEN TB=128:LOAD "0:"+TB$,8,1:REM *LOAD TABLE FILE* 64 GOTO 100 65 REM ******************************** 70 REM *SAVE PROGRAM, TYPE - RUN 70* 72 PG$="KWIZ":REM *PROGRAM FILE NAME* 74 AD=41216:BD=49152:N=2400:REM *PROG ADDRESS, SAVED FROM ADDRESS, BYTE COUNT* 76 OPEN 2,8,2,"@0:"+PG$+",P,W" 78 GOTO 88 79 REM ************ 80 REM *SAVE TABLES, TYPE - RUN 80* 82 TB$="KWIZ.TB":REM *TABLE FILE NAME* 84 AD=47072:BD=49152:N=2080:REM *TABLE ADDRESS, SAVED FROM ADDRESS, BYTE COUNT* 86 OPEN 2,8,2,"@0:"+TB$+",P,W" 88 PRINT#2,CHR$(AD-INT(AD/256)*256); 90 PRINT#2,CHR$(AD/256); 92 FOR I=0 TO N-1 94 PRINT#2,CHR$(PEEK(BD+I)); 96 NEXT I 98 CLOSE 2:END 99 REM ******************************** 100 FOR N=0 TO 23:REM *POKE IRQ VECTOR CODE BLOCK* 102 READ A:POKE I+N,A:NEXT 104 IF PG=1 THEN 112:REM *BYPASS PROGRAM POKES IF PROGRAM LOADED FROM DISK* 106 FOR J=41216 TO 43615:REM *POKE PROGRAM CODE BLOCK* 108 READ A:POKE J,A:NEXT 112 POKE 41216,TB:REM *TELLS PROGRAM WHETHER TABLES ARE LOADED FROM DISK* 116 POKE 41218,NK:REM *TELLS PROGRAM THE N-KEY FACTOR* 118 POKE 56334,PEEK(56334)AND254:REM *DISABLE KEYBOARD (TIMER) INTERRUPT* 120 POKE 788,(I-INT(I/256)*256):REM *SET UP IRQ VECTOR ADDRESS LOW BYTE* 122 POKE 789,(I/256):REM *SET UP IRQ VECTOR HIGH BYTE* 124 POKE 56334,PEEK(56334)OR1:REM *ENABLE KEYBOARD (TIMER) INTERRUPT 126 END:REM *OF LOADING* 128 REM ******************************* 200 DATA32,35,234,165,1,41,254,133,1,32,39,161,165,1,9,1,133 201 DATA1,76,126,234,0,90,32 250 REM ******************************* 300 DATA0,0,2,0,184,0,185,0,186,0,187,254,253,251,247,239,223 301 DATA191,127,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0 302 DATA0,0,0,0,0,44,1,161,48,62,32,185,163,169,128,141,1 303 DATA161,169,46,160,165,141,143,2,140,144,2,169,0,133,198,141,141 304 DATA2,141,142,2,141,27,161,141,30,161,141,37,161,141,38,161,169 305 DATA64,133,203,133,197,141,28,161,141,29,161,169,255,162,7,157,19 306 DATA161,202,16,250,32,110,163,173,38,161,208,17,173,30,161,208,20 307 DATA169,0,141,0,220,173,1,220,201,255,208,8,162,254,32,55,163 308 DATA76,150,161,169,8,141,31,161,32,156,161,32,207,162,169,127,141 309 DATA0,220,96,206,31,161,16,1,96,174,31,161,189,11,161,141,0 310 DATA220,173,1,220,205,1,220,208,248,93,19,161,141,32,161,172,32 311 DATA161,240,222,174,31,161,136,152,45,32,161,168,77,32,161,141,33 312 DATA161,140,32,161,93,19,161,45,33,161,141,34,161,240,15,206,30 313 DATA161,173,33,161,93,19,161,29,19,161,76,7,162,173,30,161,205 314 DATA2,161,176,199,173,141,2,41,3,201,3,240,190,238,30,161,173 315 DATA33,161,93,19,161,61,19,161,157,19,161,173,31,161,10,10,10 316 DATA168,173,33,161,162,255,142,36,161,238,36,161,74,144,250,152,77 317 DATA36,161,141,36,161,10,10,168,173,3,161,133,245,173,4,161,133 318 DATA246,177,245,170,172,36,161,224,5,176,76,224,3,240,72,77,141 319 DATA2,141,141,2,141,142,2,41,4,240,34,173,141,2,41,2,240 320 DATA11,169,128,77,138,2,141,138,2,76,185,161,173,141,2,41,1 321 DATA240,31,77,37,161,141,37,161,76,185,161,173,141,2,41,3,201 322 DATA3,208,13,173,145,2,48,8,173,24,208,73,2,141,24,208,76 323 DATA185,161,173,34,161,240,29,196,197,208,6,169,64,133,203,133,197 324 DATA152,160,2,136,48,10,217,28,161,208,248,169,64,153,28,161,76 325 DATA185,161,32,76,163,169,64,172,27,161,173,36,161,153,28,161,152 326 DATA73,1,141,27,161,169,16,141,140,2,169,4,141,139,2,32,48 327 DATA163,76,185,161,173,30,161,240,91,173,141,2,41,3,201,3,240 328 DATA82,44,138,2,48,2,112,75,173,140,2,240,5,206,140,2,208 329 DATA65,206,139,2,208,60,169,4,141,139,2,169,2,141,35,161,206 330 DATA35,161,48,45,174,35,161,189,28,161,201,64,240,241,141,36,161 331 DATA32,76,163,44,138,2,48,18,41,127,201,20,240,12,201,32,240 332 DATA8,201,29,240,4,201,17,208,212,32,48,163,76,253,162,96,173 333 DATA36,161,133,203,133,197,108,143,2,224,224,176,13,138,166,198,236 334 DATA137,2,176,5,157,119,2,230,198,96,173,36,161,10,10,168,173 335 DATA141,2,10,201,8,144,2,169,6,170,189,3,161,133,245,189,4 336 DATA161,133,246,177,245,170,172,36,161,96,32,234,255,165,204,208,41 337 DATA198,205,208,37,169,20,133,205,164,211,70,207,174,135,2,177,209 338 DATA176,17,230,207,133,206,32,36,234,177,243,141,135,2,174,134,2 339 DATA165,206,73,128,32,28,234,165,1,41,16,240,10,160,0,132,192 340 DATA165,1,9,32,208,8,165,192,208,6,165,1,41,31,133,1,96 341 DATA173,0,161,208,44,162,63,189,129,235,157,0,160,202,16,247,162 342 DATA63,189,194,235,157,64,160,202,16,247,162,63,189,3,236,157,128 343 DATA160,202,16,247,162,63,189,120,236,157,192,160,202,16,247,173,0 344 DATA161,16,3,76,116,164,162,228,142,199,160,232,142,194,160,232,142 345 DATA255,160,232,142,252,160,232,142,192,160,232,142,193,160,232,142,243 346 DATA160,169,0,133,245,169,184,133,246,32,117,164,189,0,160,145,245 347 DATA136,136,136,136,202,16,244,169,0,133,245,169,185,133,246,32,117 348 DATA164,189,64,160,145,245,136,136,136,136,202,16,244,169,0,133,245 349 DATA169,186,133,246,32,117,164,189,128,160,145,245,136,136,136,136,202 350 DATA16,244,169,0,133,245,169,187,133,246,32,117,164,189,192,160,145 351 DATA245,136,136,136,136,202,16,244,162,31,138,157,224,183,202,16,249 352 DATA96,160,255,169,0,145,245,136,16,251,162,63,160,252,96,252,167 353 DATA79,165,78,165,235,167,105,165,119,166,16,167,43,168,120,168,158 354 DATA168,139,168,78,165,78,165,78,165,78,165,78,165,78,165,78,165 355 DATA78,165,78,165,78,165,78,165,78,165,78,165,78,165,78,165,78 356 DATA165,78,165,78,165,78,165,78,165,78,165,0,0,188,189,190,191 357 DATA83,84,82,73,78,71,32,63,157,67,79,78,71,73,71,32,63 358 DATA157,85,83,69,82,32,63,157,32,65,76,76,32,85,83,69,68 359 DATA32,85,78,68,79,78,69,32,79,46,75,46,78,85,76,76,32 360 DATA75,69,89,32,65,66,79,82,84,83,65,86,69,32,80,71,83 361 DATA65,86,69,32,84,66,157,95,254,226,157,255,1,255,228,0,184 362 DATA8,0,185,30,224,191,46,165,78,165,0,0,0,0,0,0,32 363 DATA52,165,76,58,163,138,224,224,176,2,169,224,41,31,10,168,185 364 DATA131,164,141,195,164,185,132,164,141,196,164,108,195,164,96,32,114 365 DATA169,32,188,169,174,24,165,36,157,16,242,169,78,141,38,165,169 366 DATA165,141,39,165,76,239,168,169,131,141,143,2,169,165,141,144,2 367 DATA169,201,133,245,169,164,133,246,169,9,32,226,168,76,78,170,224 368 DATA254,240,110,176,8,224,227,176,107,224,13,240,113,32,114,169,32 369 DATA133,169,32,188,169,173,26,165,201,226,240,87,32,152,169,169,0 370 DATA141,22,165,224,225,240,47,160,32,136,16,16,169,226,133,245,169 371 DATA164,133,246,169,9,32,226,168,76,98,166,185,224,183,201,255,240 372 DATA230,141,21,165,142,20,165,169,255,153,224,183,169,225,141,19,165 373 DATA32,226,169,174,20,165,224,255,208,3,32,8,170,32,58,163,169 374 DATA18,141,143,2,169,166,141,144,2,162,61,76,58,163,162,63,32 375 DATA58,163,162,157,76,58,163,169,255,133 400 DATA245,169,164,133,246,169,6,32,226,168,76,98,166,224,254,240,41 401 DATA224,227,176,222,224,225,208,9,32,114,169,32,188,169,174,24,165 402 DATA224,13,240,26,173,21,165,32,207,168,172,22,165,138,145,245,200 403 DATA238,22,165,192,32,240,3,76,58,163,32,58,163,173,22,165,208 404 DATA18,173,21,165,168,153,224,183,173,20,165,141,19,165,32,22,170 405 DATA208,3,32,36,170,32,226,169,173,40,165,141,138,2,169,46,141 406 DATA143,2,169,165,141,144,2,162,141,76,58,163,169,145,141,143,2 407 DATA169,166,141,144,2,169,210,133,245,169,164,133,246,169,9,32,226 408 DATA168,76,78,170,224,254,240,68,176,7,224,225,144,3,76,248,165 409 DATA224,13,208,3,76,2,166,32,114,169,32,133,169,32,188,169,32 410 DATA152,169,173,22,165,201,226,240,8,142,20,165,169,226,141,22,165 411 DATA174,20,165,224,255,208,3,32,8,170,32,58,163,169,220,141,143 412 DATA2,169,166,141,144,2,162,61,76,58,163,224,254,240,249,224,227 413 DATA144,3,76,248,165,32,114,169,32,188,169,224,225,240,7,173,26 414 DATA165,201,226,208,3,174,24,165,224,13,208,8,169,0,141,22,165 415 DATA76,81,166,142,19,165,32,58,163,76,92,166,169,42,141,143,2 416 DATA169,167,141,144,2,169,219,133,245,169,164,133,246,169,7,32,226 417 DATA168,76,78,170,224,254,240,82,176,18,224,224,144,7,224,227,240 418 DATA10,76,248,165,224,13,208,3,76,2,166,32,114,169,32,133,169 419 DATA32,188,169,32,152,169,224,227,240,8,142,20,165,169,227,141,19 420 DATA165,169,0,141,21,165,141,22,165,174,20,165,224,255,208,3,32 421 DATA8,170,32,58,163,169,0,141,41,165,169,131,141,143,2,169,167 422 DATA141,144,2,162,61,76,58,163,224,254,240,249,224,228,144,3,76 423 DATA248,165,224,225,144,9,32,114,169,32,188,169,174,24,165,224,13 424 DATA208,3,76,81,166,138,201,48,144,65,201,64,240,61,144,7,201 425 DATA71,176,55,24,105,9,41,15,238,41,165,172,41,165,192,4,240 426 DATA8,192,2,240,4,10,10,10,10,192,3,176,9,13,22,165,141 427 DATA22,165,76,223,167,13,21,165,141,21,165,192,4,240,3,76,58 428 DATA163,32,58,163,76,92,166,76,248,165,32,114,169,32,188,169,174 429 DATA24,165,36,157,16,3,108,25,165,96,36,157,16,18,169,1,45 430 DATA37,161,240,11,224,20,208,8,162,29,32,58,163,162,20,96,224 431 DATA32,144,19,224,128,144,4,224,160,144,11,142,20,165,162,148,32 432 DATA58,163,174,20,165,96,36,157,16,72,169,183,160,224,162,192,44 433 DATA42,165,48,6,169,161,160,0,162,171,133,252,132,251,169,192,133 434 DATA254,160,0,132,253,177,251,145,253,200,208,249,230,252,230,254,228 435 DATA252,208,241,44,42,165,48,10,169,0,141,1,192,32,50,170,208 436 DATA3,32,64,170,169,128,77,42,165,141,42,165,162,141,96,36,157 437 DATA16,14,172,43,165,136,16,2,160,15,140,43,165,140,33,208,96 438 DATA36,157,16,14,172,45,165,136,16,2,160,15,140,45,165,140,32 439 DATA208,96,36,157,16,42,172,44,165,136,16,2,160,15,140,44,165 440 DATA140,134,2,152,160,216,132,246,160,0,132,245,145,245,200,208,4 441 DATA230,246,208,247,192,232,208,243,166,246,224,219,208,237,162,255,96 442 DATA168,10,10,10,10,10,133,245,152,74,74,74,168,185,197,164,133 443 DATA246,96,141,41,165,160,0,32,10,169,208,251,162,255,96,173,26 444 DATA165,141,41,165,173,25,165,32,207,168,160,0,76,27,169,32,10 445 DATA169,208,248,162,255,108,38,165,177,245,201,141,208,2,169,13,170 446 DATA32,58,163,200,206,41,165,96,165,198,205,137,2,144,222,165,245 447 DATA141,34,165,165,246,141,35,165,140,33,165,173,143,2,141,36,165 448 DATA173,144,2,141,37,165,169,77,141,143,2,169,169,141,144,2,162 449 DATA255,142,38,161,76,58,163,165,198,208,244,173,34,165,133,245,173 450 DATA35,165,133,246,172,33,165,173,36,165,141,143,2,173,37,165,141 451 DATA144,2,169,0,141,38,161,76,0,169,173,36,161,10,10,141,30 452 DATA165,165,245,141,31,165,165,246,141,32,165,96,173,30,165,141,27 453 DATA165,173,31,165,141,28,165,173,32,165,141,29,165,96,173,23,165 454 DATA141,19,165,173,24,165,141,20,165,173,25,165,141,21,165,173,26 455 DATA165,141,22,165,96,173,28,165,133,245,173,29,165,133,246,96,173 456 DATA31,165,133,245,173,32,165,133,246,173,30,165,168,177,245,141,23 457 DATA165,200,177,245,141,24,165,200,177,245,141,25,165,200,177,245,141 458 DATA26,165,96,173,28,165,133,245,173,29,165,133,246,173,27,165,168 459 DATA173,19,165,145,245,200,173,20,165,145,245,200,173,21,165,145,245 460 DATA200,173,22,165,145,245,96,169,247,133,245,169,164,133,246,169,8 461 DATA32,226,168,96,169,235,133,245,169,164,133,246,169,7,32,226,168 462 DATA96,169,242,133,245,169,164,133,246,169,5,32,226,168,96,169,5 463 DATA133,245,169,165,133,246,169,7,32,226,168,96,169,12,133,245,169 464 DATA165,133,246,169,7,32,226,168,96,173,138,2,141,40,165,169,64 465 DATA141,138,2,96,1,255,1,255,1,255